| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 
 | #include <arpa/inet.h>#include <assert.h>
 #include <stdio.h>
 #include <unistd.h>
 #include <stdlib.h>
 #include <errno.h>
 #include <string.h>
 
 int main(int argc, char* argv[])
 {
 if (argc <= 2)
 {
 printf("usage: %s ip_address port_number\n", basename(argv[0]));
 return 1;
 }
 const char* ip = argv[1];
 int port = atoi(argv[2]);
 
 struct sockaddr_in address = {0};
 address.sin_family = AF_INET;
 inet_pton(AF_INET, ip, &address.sin_addr);
 address.sin_port = htons(port);
 int sock = socket(PF_INET, SOCK_STREAM, 0);
 assert(sock >= 0);
 
 int ret = bind(sock, (struct sockaddr*)&address, sizeof(address));
 assert(ret != -1);
 
 ret = listen(sock, 5);
 assert(ret != -1);
 
 struct sockaddr_in client;
 socklen_t client_addrlength = sizeof(client);
 int connfd = accept(sock, (struct sockaddr*)&client, &client_addrlength);
 if (connfd < 0)
 {
 printf("errno is: %d\n", errno);
 }
 else
 {
 char remote[INET_ADDRSTRLEN];
 printf("connected with ip: %s and port: %d\n", inet_ntop(AF_INET, &client.sin_addr, remote, INET_ADDRSTRLEN), ntohs(client.sin_port));
 close(connfd);
 }
 
 close(sock);
 return 0;
 }
 
 |